﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ASPPanificadora.fabrica;
using NHibernate;
using NHibernate.Linq;
using ASPPanificadora.classes;

namespace ASPPanificadora.controller
{
    public class TipoUsuarioController : ITipoUsuarioController
    {
        Fabrica fabrica = new Fabrica();
        public string Salvar(TipoUsuario tipoUsuario, IList<TelaSistema> listaTelasSistema)
        {
            return fabrica.SalvaTipoUsuario(tipoUsuario, listaTelasSistema);
        }

        public IList<TipoUsuario> Recuperar()
        {
            ISession sessao = fabrica.sessao();
            IList<TipoUsuario> tipoUsuario = sessao.CreateCriteria<TipoUsuario>().List<TipoUsuario>();
            fabrica.fechaSessao();
            return tipoUsuario;
        }


        public TipoUsuario PesquisarPorId(int id)
        {
            ISession sessao = fabrica.sessao();
            TipoUsuario tipoUsuario = sessao.Query<TipoUsuario>().Where(a => a.Id == id).FirstOrDefault();
            tipoUsuario.LigTipoUsuarioTelaSistema = sessao.Query<LigTipoUsuarioTelaSistema>().Where(a => a.IdTipoUsuario == tipoUsuario.Id)
                .Fetch(a => a.TelaSistema)
                .ToList();
            fabrica.fechaSessao();
            return tipoUsuario;
        }

        public IList<TelaSistema> RecuperarTelaSistema()
        {
            ISession sessao = fabrica.sessao();
            IList<TelaSistema> telaSistema = sessao.CreateCriteria<TelaSistema>().List<TelaSistema>();
            fabrica.fechaSessao();
            return telaSistema;
        }

        public IList<LigTipoUsuarioTelaSistema> RecuperarTipoUsuarioTelaSistema(int idTipoUsuario)
        {
            ISession sessao = fabrica.sessao();
            IList<LigTipoUsuarioTelaSistema> ligTipoUsuarioTelaSistema = sessao.Query<LigTipoUsuarioTelaSistema>().Where(a => a.IdTipoUsuario == idTipoUsuario)
                .Fetch(a => a.TelaSistema)
                .ToList();
            fabrica.fechaSessao();
            return ligTipoUsuarioTelaSistema;
        }
    }
}